package com.ruoyi.forum.utils;

import com.alibaba.fastjson.JSON;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.forum.api.vo.UserDetail;

import javax.servlet.http.HttpServletRequest;

/**
 * @author: houyong
 * @date: 2025年11月17日 11:53
 */
public class UserSessionUtils {

    /**
     * session 请求头
     */
    public static final String USER_SESSION_ID = "Authorization";
    /**
     * session 前缀
     **/
    private static final String SESSION_ID_PREX = "session:";

    /**
     * 获取用户会话ID
     *
     * @param request HTTP请求对象，用于从中提取请求头信息
     * @return 返回从请求头中获取的用户会话ID，如果不存在则返回null
     */
    public static String getUserSessionId(HttpServletRequest request) {
        return request.getHeader(USER_SESSION_ID);
    }


    /**
     * 根据请求获取用户详细信息
     *
     * @param request      HTTP请求对象，用于获取用户会话信息
     * @param redisService Redis服务对象，用于从缓存中获取用户数据
     * @return UserDetail 用户详细信息对象，如果未找到则返回null
     */
    public static UserDetail getUserDetail(HttpServletRequest request, RedisService redisService) {
        // 获取用户会话ID
        String userSessionId = getUserSessionId(request);
        if (userSessionId == null) {
            return null;
        }
        // 构造Redis缓存键并获取缓存中的用户数据
        String key = String.format("%s%s", SESSION_ID_PREX, userSessionId);
        Object cacheObject = redisService.getCacheObject(key);
        if (cacheObject != null) {
            // 将缓存数据转换为UserDetail对象并返回
            return JSON.parseObject(cacheObject.toString(), UserDetail.class);
        }
        return null;
    }


}
